# _*_ coding: utf-8 _*_
import logging
import os.path
import colorlog
import time
from configs import config_manage

log_colors_config = {
    'DEBUG': 'cyan',
    'INFO': 'blue',
    'WARNING': 'yellow',
    'ERROR': 'red',
    'CRITICAL': 'red',
}


class Logger(object):
    def __init__(self, name=None, custom_color=True):
        self.custom_color = custom_color  # 自定义颜色

        """指定保存日志的文件路径，日志级别，以及调用文件，将日志存入到指定的文件中"""

        new_name = config_manage.LOG_PATH  # 在该路径下新建下级目录
        dir_time = time.strftime('%Y-%m-%d', time.localtime(time.time()))  # 返回当前时间的年月日作为目录名称

        try:
            # 创建一个logger(初始化logger)
            self.log = logging.getLogger(name)
            self.log.setLevel(logging.DEBUG)

            # 创建一个handler，用于写入日志文件
            log_name = new_name + dir_time + '.log'  # 定义日志文件的路径以及名称
            self.fh = logging.FileHandler(log_name, encoding='utf-8')
            self.fh.setLevel(logging.INFO)

            # 定义handler的输出格式
            formatter = logging.Formatter('[%(asctime)s] - [%(name)s] - [%(levelname)s] - %(message)s')
            self.fh.setFormatter(formatter)

            # 给logger添加handler
            self.log.addHandler(self.fh)

            # 再创建一个handler，用于输出到控制台
            self.ch = logging.StreamHandler()
            self.ch.setLevel(logging.INFO)

            # 定义handler的输出格式
            formatter = logging.Formatter('[%(asctime)s] - [%(name)s] - [%(levelname)s] - %(message)s')
            # # formatter = colorlog.ColoredFormatter('%(log_color)s [%(asctime)s] - [%(levelname)s] - %(message)s', log_colors=log_colors_config)
            self.ch.setFormatter(formatter)
            # 给logger添加handler
            self.log.addHandler(self.ch)

        except Exception as e:
            print("输出日志失败！ %s" % e)

    def fontColor(self, color):
        # 控制台不同的日志等级输出不同的颜色
        formatter = logging.Formatter(color % '[%(asctime)s] - [%(levelname)s] - %(message)s')
        # 定义handler的输出格式
        self.ch.setFormatter(formatter)

    # 日志接口，用户只需调用这里的接口即可，这里只定位了INFO, WARNING, ERROR三个级别的日志，可根据需要定义更多接口
    # 设置颜色格式：\033[显示方式;字体颜色;背景颜色m\033[0m
    def info(self, msg):
        if self.custom_color is True:
            self.fontColor("\033[0;{};0m%s\033[0m".format(96))  # 96：强蓝色；数字对应不同的颜色，具体的颜色表，可到common.logger_color.py运行脚本查看结果颜色
        self.log.info(msg)
        return

    def warning(self, msg):
        if self.custom_color is True:
            self.fontColor("\033[0;{};0m%s\033[0m".format(93))  # 93：金色；数字对应不同的颜色，具体的颜色表，可到common.logger_color.py运行脚本查看结果颜色
        self.log.warning(msg)
        return

    def error(self, msg):
        if self.custom_color is True:
            self.fontColor("\033[0;{};0m%s\033[0m".format(31))  # 31：红色；数字对应不同的颜色，具体的颜色表，可到common.logger_color.py运行脚本查看结果颜色
        self.log.error(msg)
        return

    def del_handler(self):
        #  在记录日志之后移除句柄
        self.log.removeHandler(self.ch)
        self.log.removeHandler(self.fh)


if __name__ == '__main__':
    logger = Logger()
    logger.info("[2019-08-22 09:25:52,870] - [INFO] - ============【Retailgoods_case测试用例开始】====================")
    logger.warning("[2019-08-22 09:25:52,870] - [INFO] - ============【Retailgoods_case测试用例开始】====================")
    logger.error("[2019-08-22 09:25:52,870] - [INFO] - ============【Retailgoods_case测试用例开始】====================")
